using System;
using System.Collections;
using Server;
using Server.Items;
using Server.Mobiles;

namespace Server.Engines.Quests
{	
	public class BrokenShaftQuest : BaseQuest
	{				
		/* Broken Shaft */
		public override object Title{ get{ return 1074018; } }
		
		/* What do humans know of archery? Humans can barely shoot straight. Why, your efforts are 
		absurd. In fact, I will make a wager - if these so called human arrows I've heard about are 
		really as effective and innovative as human braggarts would have me believe, then I'll trade 
		you something useful.  I might even teach you something of elven craftsmanship. */	
		public override object Description{ get{ return 1074112; } }
		
		/* Fine then, I'm shall find another to run my errands then. */
		public override object Refuse{ get{ return 1074063; } }
		
		/* Hurry up! I don't have all day to wait for you to bring what I desire! */
		public override object Uncomplete{ get{ return 1074064; } }
		
		/* These human made goods are laughable! It offends so -- I must show you what elven skill is capable of! */
		public override object Complete{ get{ return 1074065; } }
	
		public BrokenShaftQuest() : base()
		{			
			AddObjective( new ObtainObjective( typeof( Arrow ), "arrows", 10, 0xF3F ) );
			
			AddReward( new BaseReward( typeof( FletcherCraftsmanSatchel ), 1074282 ) );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}		
	}
	
	public class BendingTheBowQuest : BaseQuest
	{				
		/* Bending the Bow */
		public override object Title{ get{ return 1074019; } }
		
		/* Human craftsmanship! Ha! Why, take an elven bow. It will last for a lifetime, never break and 
		always shoot an arrow straight and true. Can't say the same for a human, can you? Bring me some 
		of these human made bows, and I will show you. */	
		public override object Description{ get{ return 1074113; } }
		
		/* Fine then, I'm shall find another to run my errands then. */
		public override object Refuse{ get{ return 1074063; } }
		
		/* Hurry up! I don't have all day to wait for you to bring what I desire! */
		public override object Uncomplete{ get{ return 1074064; } }
		
		/* These human made goods are laughable! It offends so -- I must show you what elven skill is capable of! */
		public override object Complete{ get{ return 1074065; } }
	
		public BendingTheBowQuest() : base()
		{			
			AddObjective( new ObtainObjective( typeof( Bow ), "bows", 10, 0x13B2 ) );
			
			AddReward( new BaseReward( typeof( FletcherCraftsmanSatchel ), 1074282 ) );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}		
	}
	
	public class ArmsRaceQuest : BaseQuest
	{				
		/* Arms Race */
		public override object Title{ get{ return 1074020; } }
		
		/* Leave it to a human to try and improve upon perfection. To take a bow and turn it into a mechanical 
		contraption like a crossbow. I wish to see more of this sort of "invention". Fetch for me a crossbow, 
		human. */	
		public override object Description{ get{ return 1074114; } }
		
		/* Fine then, I'm shall find another to run my errands then. */
		public override object Refuse{ get{ return 1074063; } }
		
		/* Hurry up! I don't have all day to wait for you to bring what I desire! */
		public override object Uncomplete{ get{ return 1074064; } }
		
		/* These human made goods are laughable! It offends so -- I must show you what elven skill is capable of! */
		public override object Complete{ get{ return 1074065; } }
	
		public ArmsRaceQuest() : base()
		{			
			AddObjective( new ObtainObjective( typeof( Crossbow ), "crossbows", 10, 0xF50 ) );
			
			AddReward( new BaseReward( typeof( FletcherCraftsmanSatchel ), 1074282 ) );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}		
	}
	
	public class ImprovedCrossbowsQuest : BaseQuest
	{				
		/* Improved Crossbows */
		public override object Title{ get{ return 1074021; } }
		
		/* How lazy is man! You cannot even be bothered to pull your own drawstring and hold an arrow ready? You 
		must invent a device to do it for you? I cannot understand, but perhaps if I examine a heavy crossbow for 
		myself, I will see their appeal. Go and bring me such a device and I will repay your meager favor. */	
		public override object Description{ get{ return 1074115; } }
		
		/* Fine then, I'm shall find another to run my errands then. */
		public override object Refuse{ get{ return 1074063; } }
		
		/* Hurry up! I don't have all day to wait for you to bring what I desire! */
		public override object Uncomplete{ get{ return 1074064; } }		
		
		/* These human made goods are laughable! It offends so -- I must show you what elven skill is capable of! */
		public override object Complete{ get{ return 1074065; } }
	
		public ImprovedCrossbowsQuest() : base()
		{			
			AddObjective( new ObtainObjective( typeof( HeavyCrossbow ), "heavy crossbows", 10, 0x13FD ) );
			
			AddReward( new BaseReward( typeof( FletcherCraftsmanSatchel ), 1074282 ) );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}		
	}
	
	public class BuildingTheBetterCrossbowQuest : BaseQuest
	{				
		/* Building the Better Crossbow */
		public override object Title{ get{ return 1074022; } }
		
		/* More is always better for a human, eh? Take these repeating crossbows. What sort of mind invents such a thing? 
		I must look at it more closely. Bring such a contraption to me and you'll receive a token for your efforts. */	
		public override object Description{ get{ return 1074116; } }
		
		/* Fine then, I'm shall find another to run my errands then. */
		public override object Refuse{ get{ return 1074063; } }
		
		/* Hurry up! I don't have all day to wait for you to bring what I desire! */
		public override object Uncomplete{ get{ return 1074064; } }
		
		/* These human made goods are laughable! It offends so -- I must show you what elven skill is capable of! */
		public override object Complete{ get{ return 1074065; } }
	
		public BuildingTheBetterCrossbowQuest() : base()
		{			
			AddObjective( new ObtainObjective( typeof( RepeatingCrossbow ), "repeating crossbow", 10, 0x26C3 ) );
			
			AddReward( new BaseReward( typeof( FletcherCraftsmanSatchel ), 1074282 ) );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}		
	}

	public class Beotham : MondainQuester
	{		
		public override Type[] Quests
		{ 
			get{ return new Type[] 
			{ 
				typeof( BrokenShaftQuest ),
				typeof( BendingTheBowQuest ),
				typeof( ArmsRaceQuest ),
				typeof( ImprovedCrossbowsQuest ),
				typeof( BuildingTheBetterCrossbowQuest )
			};} 
		}
		
		[Constructable]
		public Beotham() : base( "Beotham", "the bowcrafter" )
		{			
		}
		
		public Beotham( Serial serial ) : base( serial )
		{
		}		
		
		public override void InitBody()
		{
			InitStats( 100, 100, 25 );
			
			Female = false;
			CantWalk = true;
			Race = Race.Elf;
			
			Hue = 0x876C;
			HairItemID = 0x2FC0;
			HairHue = 0x238;
		}
		
		public override void InitOutfit()
		{
			AddItem( new Sandals( 0x901 ) );
			AddItem( new LongPants( 0x52C ) );
			AddItem( new FancyShirt( 0x546 ) );
			
			Item item;
			
			item = new LeafGloves();
			item.Hue = 0x901;
			AddItem( item );
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
}